package basis.netease.easy;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 7-7 数字拆分求和
 * 对于给定的正整数k，将其表示为一个正整数序列之和，且该序列中相邻元素的差值为等差分布（等差分布从1开始）。注意，请打印出所有可能的序列（打印多个序列时，按照首个数字从小到大依次打印）。
 * 例如：
 * 示例1输入：
 * k=26
 * 示例1输出：
 * 4,5,7,10
 * 该序列的和为26，相邻元素的差值为1,2,3
 * 示例2输入：
 * k=55
 * 示例2输出
 * 7,8,10,13,17
 * 17,18,20
 * 27,28
 * 即，有3个序列满足条件，其和均为55，且相邻元素的差值为等差分布（从1开始）
 * 注：若没有满足条件的序列，则打印空串。
 * 输入格式:
 * 正整数k
 * 输出格式:
 * 打印所有满足条件的序列，每行对应1个序列，每个序列的数字间以,相隔。例如k=55，输出为：
 * 7,8,10,13,17
 * 17,18,20
 * 27,28
 * 输入样例:
 * 在这里给出一组输入。例如：
 * 55
 * 输出样例:
 * 在这里给出相应的输出。例如：
 * 7,8,10,13,17
 * 17,18,20
 * 27,28
 */
public class Main_6 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int k = in.nextInt();
        numSplit(k);
    }
    public static void numSplit(int k) {
        List<List<Integer>> res = new ArrayList<>();
        for (int i = 1; i < k; i++) {
            int diff = 1;
            int sum = 0;
            int num = i;
            List<Integer> list = new ArrayList<>();
            while (sum < k) {
                list.add(num);
                sum += num;
                if (sum == k) {
                    res.add(list);
                    break;
                }
                num += diff;
                diff++;
            }
        }
        if (res.isEmpty()) {
            System.out.println("");
            return;
        }
        for (List<Integer> list : res) {
            StringBuilder sb = new StringBuilder();
            for (int i : list) {
                sb.append(i).append(",");
            }
            sb.setLength(sb.length() - 1);
            System.out.println(sb);
        }
        // 等列公式：an=2+(n-1)3（n为正整数）。
        // 2 5 8 11
        //S1为首项，an为第n项的通项公式，d为公差。
        //前n项和公式为：Sn=na1+n(n-1)d/2（n为正整数）。
    }

}
